g++ hoge.cpp gcc hoge.cpp -lstdc++後者は、 LoopTools などを使うときに必要。
export LT=/Users/abetomo/work/programs/FeynInstall/LoopTools-2.7/i386-Darwinコンパイルは以下のおまじない。
$LT/bin/fcc -I$LT/include (source files) -L$LT/lib -looptools $LT/bin/fcc -I$LT/include hoge.cpp -L$LT/lib -looptools -lstdc++後者は、 Eigen を使うときは必要。g++ でないとコンパイルできないため。
#define _USE_MATH_DEFINES // M_PI (円周率)のため。includeの前に書く。 #include <iostream> // たぶん絶対必要 #include <Eigen/Dense> // Eigen を使うのに必要 #include <math.h> // sin cos とか #include <complex> // 複素数 #include <fstream> //ファイル入出力 using Eigen::MatrixXd; // Default であった。 // 以下のは書いておくと、プログラムが書きやすくなる。 using namespace std; using namespace Eigen;
g++ hoge.cpp
We need
#include <Eigen/Dense>
いろいろコマンド
MatrixXd m(2,2); // 成分が実数の2x2の行列。
Matrix<complex<double>, 3, 3> m; // 3x3 の行列を宣言。成分は複素でdouble.
m(0,0) = ms;
m(1,0) = y*v/sqrt(2);
m(2,0) = yp*v/sqrt(2);
m(0,1) = y*v/sqrt(2);
m(1,1) = 0;
m(2,1) = mD;
m(0,2) = yp*v/sqrt(2);
m(1,2) = mD;
m(2,2) = 0;
m*m // 行列の積は *
m.conjugate()
m.transpose()
// m を対角化して固有値と固有ベクトルを s という変数に格納する。
// for a complex matrix
ComplexEigenSolver< Matrix< complex<double>, 3, 3> > s(m);
// for a real matrix
EigenSolver< Matrix< double, 3, 3> > s(m);
// Eigenvalues 小さい順に入る(注1)。
s.eigenvalues();
s.eigenvalues()(0); // 1st Eigenvalues
s.eigenvalues()(1); // 2nd Eigenvalues
s.eigenvalues()(2); // 3rd Eigenvalues
// Unitary matrix which diagonalize m2 via U^{\dagger} m U
U = s.eigenvectors();
// 成分が欲しいなら
U(0,0) // 1, 1 成分
(s.eigenvectors())(0,0); //1, 1 成分。括弧の括り方に注意。
// What we need to use complex numbers
#include <complex>
//yp を複素数と宣言
std::complex<double> yp;
//yp に値を代入
yp = (a, b);
//yp に極座標で
// yp = std::polar(r, theta);
yp = polar(r, theta);
// 実部、虚部、位相。
hoge.real();
hoge.imag();
arg(hoge);
ofstream ofs( "hoge.dat" );
ofs << "a= " << a << endl;